// import { Injectable, Injector } from '@angular/core';
// import {
//     HttpHandler,
//     HttpInterceptor,
//     HttpRequest,
//     HttpErrorResponse
// } from '@angular/common/http';
// import { TokenService } from './token.service';
// import { SettingsService } from '../../setting/settings.service';
// import { Router } from '@angular/router';
// import { Observable, of, empty } from 'rxjs';
// import { mergeMap, catchError } from 'rxjs/operators';
// import { NzMessageService } from 'ng-zorro-antd';


// @Injectable()
// export class TokenInterceptor implements HttpInterceptor {
//     private skip = ['/assets/', '/employee/login', 'assets/json/version.json'];
//     private _messageId = null;

//     constructor(
//         private tokenService: TokenService,
//         private injector: Injector
//     ) {}

//     intercept(req: HttpRequest<any>, next: HttpHandler): Observable<any> {
//         const token = this.tokenService.access_token.access_token;
//         // if (
//         //     !token &&
//         //     !req.url.includes('/login') &&
//         //     !req.url.includes('assets/json/version.json')
//         // ) {
//         //     this.goLogin();
//         //     throw new Error('No token is carried!'); //既然都没带token了没必要发起请求增加服务器压力
//         // }
//         for (let v of this.skip) {
//             if (req.url.includes(v)) {
//                 return next.handle(req);
//             }
//         }
//         const authReq = req.clone({
//             headers: req.headers.set('Authorization', `Bearer ${token}`)
//         });
//         return next.handle(authReq).pipe(
//             mergeMap((event) => {
//                 return of(event);
//             }),
//             catchError((err: HttpErrorResponse) => {
//                 if (err.error && err.error.error === 'invalid_token') {
//                     this.errorMessages('Session expired, please log in again.');
//                     this.goLogin();
//                     return empty();
//                     }else {
//                         return Observable.create(observer => {
//                             observer.error(err);
//                         });
//                     }
//             })
//         );
//     }
//     private errorMessages(message) {
//         // 一秒钟内，多个请求出错，只提示第一个错误
//         if (this._messageId === null) {
//             this._messageId = this.injector.get(NzMessageService).warning(message);
//             setTimeout(() => {
//                 this._messageId = null;
//             }, 1000);
//         }
//     }
//     private goLogin() {
//         this.injector.get(SettingsService).clean();
//         this.injector.get(TokenService).destroy();
//         this.injector.get(Router).navigate(['/login']);
//     }
// }
